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