View | Details | Raw Unified | Return to bug 856389
Collapse All | Expand All

(-)orig/sleep-config.c (+45 lines)
Lines 133-138 Link Here
133
        return false;
133
        return false;
134
}
134
}
135
135
136
static int parse_proc_cmdline_resume() {
137
        _cleanup_free_ char *line = NULL;
138
        char *w, *state;
139
        size_t l;
140
        int r;
141
	
142
        r = proc_cmdline(&line);
143
        if (r < 0)
144
                log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r));
145
        if (r <= 0)
146
                return 0;
147
148
	if (strstr(line, "resume=")) {
149
	        FOREACH_WORD_QUOTED(w, l, line, state) {
150
        	        _cleanup_free_ char *word;
151
                	word = strndup(w, l);
152
153
                 	if (startswith(word, "resume=")) {
154
        			struct stat s;
155
                        	const char *path = word + 7;
156
157
                         	if (stat(path,&s) == 0) {
158
					if (S_ISBLK(s.st_mode)) {
159
			                	return 0;
160
					} else if (S_ISREG(s.st_mode)) {
161
						if (strstr(line, "resume_offset="))
162
                   	                		return 0;
163
			        		else 
164
			                		return -1;
165
					 } else { 
166
			                	return -1;
167
                                	 } 
168
                 		}
169
			}
170
		}
171
        	return 0;
172
	} else {
173
		return -1;
174
	}
175
}
176
	
136
int can_sleep_disk(char **types) {
177
int can_sleep_disk(char **types) {
137
        char *w, *state, **type;
178
        char *w, *state, **type;
138
        int r;
179
        int r;
Lines 145-150 Link Here
145
        if (access("/sys/power/disk", W_OK) < 0)
186
        if (access("/sys/power/disk", W_OK) < 0)
146
                return false;
187
                return false;
147
188
189
	/* check for resume parameters on command line */
190
	if (parse_proc_cmdline_resume() < 0) 
191
		return false;
192
148
        r = read_one_line_file("/sys/power/disk", &p);
193
        r = read_one_line_file("/sys/power/disk", &p);
149
        if (r < 0)
194
        if (r < 0)
150
                return false;
195
                return false;

Return to bug 856389